#ifndef LEDCOLOR_H
#define LEDCOLOR_H

#include <FastLED.h>
#include <stdint.h>
#include "config.h"

/**
 * @brief LED全局颜色控制类
 * 
 * 负责管理LED灯带的全局颜色效果，提供多种颜色方案
 * 与峰值点颜色独立控制，互不干扰
 */
class LEDColorController {
public:
    // 获取单例实例
    static LEDColorController& instance();
    
    // 设置当前颜色方案
    void setColorScheme(ColorScheme scheme);
    
    // 获取当前颜色方案
    ColorScheme getCurrentColorScheme() const { return currentScheme_; }
    
    // 获取指定位置的颜色（基于当前颜色方案）
    CRGB getColorForPosition(float position, uint8_t brightness = 255, int index = -1, int totalCount = -1);
    
    // 获取指定位置的颜色（指定颜色方案）
    CRGB getColorForPosition(float position, ColorScheme scheme, uint8_t brightness = 255, int index = -1, int totalCount = -1);
    
    // 设置单色模式的颜色
    void setSingleColor(CRGB color);
    
    // 获取单色模式的颜色
    CRGB getSingleColor() const { return singleColor_; }
    
    // 更新动画效果（需要在主循环中调用）
    void update();
    
    // 获取颜色方案名称
    static const char* getColorSchemeName(ColorScheme scheme);
    
    // 设置动画速度（0-255，数值越大变化越快）
    void setAnimationSpeed(uint8_t speed);
    
    // 设置颜色饱和度（0-255）
    void setSaturation(uint8_t saturation);
    
    // 重置动画相位
    void resetAnimation();

private:
    LEDColorController();
    ~LEDColorController() = default;
    
    // 禁止拷贝构造和赋值
    LEDColorController(const LEDColorController&) = delete;
    LEDColorController& operator=(const LEDColorController&) = delete;
    
    // 各种颜色方案的实现函数
    CRGB getRainbowColor(float position, uint8_t brightness, int index = -1, int totalCount = -1);
    CRGB getFireColor(float position, uint8_t brightness);
    CRGB getOceanColor(float position, uint8_t brightness);
    CRGB getForestColor(float position, uint8_t brightness);
    CRGB getPartyColor(float position, uint8_t brightness);
    CRGB getCloudColor(float position, uint8_t brightness);

    // 成员变量
    static LEDColorController* instance_;
    ColorScheme currentScheme_;          // 当前颜色方案
    CRGB singleColor_;                      // 单色模式的颜色
    uint32_t animationTime_;                // 动画时间计数器
    uint8_t animationPhase_;                // 动画相位
    uint8_t animationSpeed_;                // 动画速度
    uint8_t adjustedRainbowSpeed_;          // FFT节拍调整后的彩虹速度
    uint8_t saturation_;                    // 颜色饱和度
    uint32_t lastUpdateTime_;               // 上次更新时间
};

// 全局函数接口（兼容现有代码）
void setGlobalColorScheme(uint8_t scheme);
uint8_t getCurrentGlobalColorScheme();
CRGB getGlobalColorForPosition(float position, uint8_t brightness = 255);
void setGlobalSingleColor(CRGB color);
const char* getGlobalColorSchemeName(uint8_t scheme);

#endif // LEDCOLOR_H